package com.ssy.lingxi.marketing.model.vo.coupon.request;

import com.ssy.lingxi.marketing.model.vo.coupon.response.SuitableCommoditySkuVO;
import lombok.Data;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.PositiveOrZero;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 商家优惠券请求类
 * @author yzc
 * @version 2.0.0
 * @date 2021/6/25
 */
@Data
public class MerchantCouponBaseRequest implements Serializable {

    private static final long serialVersionUID = -7052115332063528098L;

    /**
     * 优惠券名称
     */
    @NotEmpty(message = "优惠券名称不能为空")
    private String name;

    /**
     * 优惠券类型
     */
    @NotNull(message = "优惠券类型不能为空")
    private Integer type;

    /**
     * 领(发)券起始时间
     */
    @NotNull(message = "领(发)券起始时间不能为空")
    private Long releaseTimeStart;

    /**
     * 领(发)券结束时间
     */
    @NotNull(message = "领(发)券结束时间不能为空")
    private Long releaseTimeEnd;

    /**
     * 券面额
     */
    @NotNull(message = "券面额不能为空")
    @PositiveOrZero(message = "券面额要大于等于0")
    private BigDecimal denomination;

    /**
     * 发券数量
     */
    @NotNull(message = "发券数量不能为空")
    @Min(value = 0, message = "发券数量要大于0")
    private Integer quantity;

    /**
     * 领取方式
     */
    @NotNull(message = "领取方式不能为空")
    private Integer getWay;

    /**
     * 领取条件, 每会员ID共可领
     */
    private Integer conditionGetTotal;

    /**
     * 领取条件, 每会员ID每日可领
     */
    private Integer conditionGetDay;

    /**
     * 有效类型 1-固定有效时间 2-自领取开始时间
     */
    @NotNull(message = "有效类型不能为空")
    private Integer effectiveType;

    /**
     * 固定有效时间, 券有效起始时间
     */
    private Long effectiveTimeStart;

    /**
     * 固定有效时间, 券有效结束时间
     */
    private Long effectiveTimeEnd;

    /**
     * 自领取开始时间, 券多少天失效
     */
    private Integer invalidDay;

    /**
     * 使用条件, 满多少金额可用
     */
    @NotNull(message = "有使用条件不能为空")
    @PositiveOrZero(message = "使用条件要大于等于0")
    private BigDecimal useConditionMoney;

    /**
     * 使用条件说明
     */
    private String useConditionDesc;

    /**
     * 适用商品
     */
    private List<SuitableCommoditySkuVO> suitableCommoditySkuList;

    /**
     * 适用品类id, [[一级id, 二级id ....], [一级id, 二级id ....]]
     */
    private List<List<Long>> suitableCategoryList;

    /**
     * 适用品牌id
     */
    private List<Long> suitableBrandList;

    /**
     * 适用会员(适用用户)
     *
     */
    @NotEmpty(message = "适用用户不能为空")
    private List<Integer> suitableMemberTypes;

    /**
     * 适用会员等级(会员等级id)
     * 当适用用户(会员) 类型有勾选新会员、老会员选型,该字段作用于这些数据
     */
    private List<Long> suitableMemberLevelTypes;

    /**
     * 适用商城id
     */
    private List<Long> suitableMallTypes;
}
